"""文件操作示例模块

该模块演示了如何使用PySide6的QFileDialog类实现各种文件操作功能，
包括打开文件、保存文件、选择文件夹等常见文件操作。
"""

import sys
from PySide6 import QtCore, QtWidgets

class MyWidget(QtWidgets.QWidget):
    """文件操作窗口类
    
    提供文件选择功能的GUI界面，演示QFileDialog的各种用法。
    """
    
    def __init__(self):
        """初始化窗口组件"""
        super().__init__()

        # 设置窗口标题
        self.setWindowTitle('文件')
        
        # 创建按钮和标签组件
        self.button = QtWidgets.QPushButton("点击")
        self.text = QtWidgets.QLabel("Hello World", alignment=QtCore.Qt.AlignCenter)

        # 创建垂直布局管理器
        self.layout = QtWidgets.QVBoxLayout(self)
        self.layout.addWidget(self.text)
        self.layout.addWidget(self.button)

        # 连接按钮点击信号到处理槽函数
        self.button.clicked.connect(self.magic)

    @QtCore.Slot()
    def magic(self):
        """按钮点击事件处理槽函数
        
        当用户点击按钮时，显示文件选择对话框并打印选择结果。
        """
        self.text.setText('点击了')

        # 创建文件对话框实例
        fd = QtWidgets.QFileDialog()

        # 示例代码：各种文件操作（已注释，可根据需要启用）
        # 选中单个文件
        # res = fd.getOpenFileName()
        # 获取文件url
        # res = fd.getOpenFileUrl()

        # 选中多个文件
        # res = fd.getOpenFileNames()

        # 获取打开文件夹路径
        # res = fd.getExistingDirectoryUrl()

        # 获取选中文件夹
        # res = fd.getExistingDirectory()

        # 保存文件夹
        # res = fd.getSaveFileName()

        # 选择文件后添加后缀
        # fd.setDefaultSuffix(QtWidgets.QFileDialog.AcceptOpen)
        # fd.setDefaultSuffix('json')

        # 选中获取类型文件
        # fd.setFileMode(QtWidgets.QFileDialog.AnyFile)

        # 打开存在的文件
        # fd.setFileMode(QtWidgets.QFileDialog.ExistingFile)
        # fd.setFileMode(QtWidgets.QFileDialog.ExistingFiles)

        # 打开目录
        # fd.setFileMode(QtWidgets.QFileDialog.Directory)

        # 设置目录
        # fd.setDirectory('./')

        # 设置类型
        # fd.setNameFilter('图片文件(*.jpg *.png)')
        # fd.selectNameFilter("Images (*.png *.jpg)")
        # fd.setNameFilters("Text files (*.txt);;Images (*.png *.jpg)")

        # 文件详情
        # fd.setViewMode(QtWidgets.QFileDialog.Detail)
        # fd.setViewMode(QtWidgets.QFileDialog.List)

        # 实际执行文件选择操作
        res = fd.getOpenFileName()
        print(res)


if __name__ == "__main__":
    # 创建应用程序实例
    app = QtWidgets.QApplication([])

    # 创建并显示窗口
    widget = MyWidget()
    widget.resize(500, 400)
    widget.show()

    # 运行应用程序事件循环
    sys.exit(app.exec())